package main

import (
	"github.com/gin-gonic/gin"
	"lms/handler"
)

// PublicRouter 主要只ws路由，因为我目前没办法解决ws中自定义token的问题
func PublicRouter(r *gin.RouterGroup) {
	r.GET("chat", handler.KnowledgeApi.ChatForWS)
}

func RegisterRouter(r *gin.RouterGroup) {
	coursewareRouter(r) // 注册课件路由
	courseRouter(r)     // 注册课程路由
	examRouter(r)       // 注册题库和考试路由
	knowledgeRouter(r)  // 注册知识库路由
	studyRouter(r)      // 学生端的路由
	remoteApiRouter(r)  // 应该由其他微服务提供的路由
}

// 这段路由在正式放大时应该替换为微服务调用
func remoteApiRouter(r *gin.RouterGroup) {

}

func coursewareRouter(r *gin.RouterGroup) {
	sub := r.Group("courseware")
	//获取目录列表
	sub.GET("folderList", handler.CoursewareApi.GetAllFolder)
	// 创建目录
	sub.POST("createCoursewareFolder", handler.CoursewareApi.CreateCoursewareFolder)
	// 删除目录
	sub.DELETE("folder/:id", handler.CoursewareApi.DeleteFolder)
	// 上传课件
	sub.POST("upload", handler.CoursewareApi.Upload)
	// 获取课件code
	sub.GET("code", handler.CoursewareApi.GetCoursewareCode)
	// 创建课件
	sub.POST("create", handler.CoursewareApi.Create)
	// 更新课件信息
	sub.PUT("update", handler.CoursewareApi.Update)
	// 删除课件信息
	sub.DELETE("/:id", handler.CoursewareApi.Delete)
	// 分页查询
	sub.GET("page", handler.CoursewareApi.Page)
}
func courseRouter(r *gin.RouterGroup) {
	sub := r.Group("course")
	// 获取目录列表
	sub.GET("folderList", handler.CourseApi.FolderList)
	// 创建目录
	sub.POST("courseFolder", handler.CourseApi.CreateCourseFolder)
	// 删除目录
	sub.DELETE("courseFolder/:id", handler.CourseApi.DeleteFolder)

	// 创建课程
	sub.POST("create", handler.CourseApi.Create)
	// 绑定课件
	sub.POST("bindCourseware", handler.CourseApi.BindCourseware)
	// 发布课程
	sub.POST("publish", handler.CourseApi.PublishCourse)
	// 获取课程列表，前端分页
	sub.GET("list", handler.CourseApi.FindPage)
	// 管理员获取课程分页
	sub.GET("root/page")
	// 删除课程
	sub.DELETE("/:id", handler.CourseApi.DeleteCourse)
}

func knowledgeRouter(r *gin.RouterGroup) {
	sub := r.Group("knowledge")
	// 创建知识库
	sub.POST("create", handler.KnowledgeApi.Add)
	// 获取知识库列表
	sub.GET("list", handler.KnowledgeApi.List)
	// 删除知识库
	sub.DELETE("/:id", handler.KnowledgeApi.Delete)
	// 投喂文件给知识库
	sub.POST("embedding", handler.KnowledgeApi.BindFile)
	// 基于知识库聊天-前端解决不了ws握手时自定义token的问题，暂时没有被调用。
	sub.GET("chat", handler.KnowledgeApi.ChatForWS)
}

// 学员端路由
func studyRouter(r *gin.RouterGroup) {
	sub := r.Group("study")
	// 学员获取课程列表
	sub.GET("courseList", handler.StudyingApi.StudentGetPage)
	// 获取课程详情dto
	sub.GET("courseDetail/:id", handler.StudyingApi.CourseDetail)
	// 获取课程详情，也就是课程映射的课件列表
	sub.GET("coursewareDetails/:courseId", handler.StudyingApi.CoursewareDetails)
	// 获取课件资源信息
	sub.GET("resource/:coursewareId/:courseId", handler.StudyingApi.GetCoursewareResource)

}

func examRouter(r *gin.RouterGroup) {
	sub := r.Group("exam")
	// 获取题库目录
	sub.GET("questionFolderList", handler.QuestionApi.QuestionFolderList)
	// 导入试题
	sub.POST("importQuestion", handler.QuestionApi.ImportQuestion)
	// 试题分页查询
	sub.GET("questionPage", handler.QuestionApi.Question)
	// 添加试卷
	sub.POST("addExamPaper", handler.QuestionApi.CreateExamPaper)
	// 为试卷绑定题目
	sub.POST("bindQuestions", handler.QuestionApi.ExamPaperBindQuestion)
	// 查询试卷分页
	sub.GET("getExamPaperPage", handler.QuestionApi.GetExamPaperPage)
	// 获取试卷试题列表
	sub.GET("getExamPaperQuestions/:id", handler.QuestionApi.GetExamPaperQuestions)
	// 开始考试, todo: 打算用 ws来实现考试过程，这个地方先不做。
	// 交卷，特指用户自己交卷的行为
	sub.POST("handInPaper", handler.QuestionApi.HandInPaper)
}
